﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using BackusEntity;
using BackusEntity.BE;
using Backus.Log;

namespace Backus.Data
{
    public class UsuarioDAO
    {
        SqlConnection conexion;
        SqlDataAdapter comando;
        SqlCommand cmd;
        String errores;
        Conexion cn = new Conexion();

        LogManager logManager = new LogManager(System.Configuration.ConfigurationManager.AppSettings["LOG_FILE"].ToString());

        public List<UsuarioBE> obtenerUsuariosPorCriterio(UsuarioBE usuario)
        {
            List<UsuarioBE> usuarios = new List<UsuarioBE>();
            SqlDataReader dr = null;
            try
            {
                conexion = cn.Conectar();
                cmd = new SqlCommand("usp_ObtenerUsuariosPorCriterio", conexion);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@nombre", SqlDbType.VarChar));
                cmd.Parameters["@nombre"].Direction = ParameterDirection.Input;
                cmd.Parameters["@nombre"].Value = usuario.nombre;

                cmd.Parameters.Add(new SqlParameter("@apellidoPaterno", SqlDbType.VarChar));
                cmd.Parameters["@apellidoPaterno"].Direction = ParameterDirection.Input;
                cmd.Parameters["@apellidoPaterno"].Value = usuario.apellidoPaterno;

                cmd.Parameters.Add(new SqlParameter("@apellidoMaterno", SqlDbType.VarChar));
                cmd.Parameters["@apellidoMaterno"].Direction = ParameterDirection.Input;
                cmd.Parameters["@apellidoMaterno"].Value = usuario.apellidoMaterno;

                dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    UsuarioBE usuarioBE = new UsuarioBE();
                    if (dr[0].ToString() != null && dr[0].ToString().Trim().Length > 0)
                        usuarioBE.login = dr[0].ToString();
                    if (dr[1].ToString() != null && dr[1].ToString().Trim().Length > 0)
                        usuarioBE.nombre = dr[1].ToString();
                    if (dr[2].ToString() != null && dr[2].ToString().Trim().Length > 0)
                        usuarioBE.apellidoPaterno = dr[2].ToString();
                    if (dr[3].ToString() != null && dr[3].ToString().Trim().Length > 0)
                        usuarioBE.apellidoMaterno = dr[3].ToString();
                    if (dr[4].ToString() != null && dr[4].ToString().Trim().Length > 0)
                        usuarioBE.anexo = dr[4].ToString();
                    if (dr[5].ToString() != null && dr[5].ToString().Trim().Length > 0)
                        usuarioBE.telefono = dr[5].ToString();
                    if (dr[6].ToString() != null && dr[6].ToString().Trim().Length > 0)
                        usuarioBE.correoElectronico = dr[6].ToString();
                    if (dr[7].ToString() != null && dr[7].ToString().Trim().Length > 0)
                        usuarioBE.DNI = dr[7].ToString();
                    if (dr[8].ToString() != null && dr[8].ToString().Trim().Length > 0)
                        usuarioBE.idCentro = dr[8].ToString();
                    if (dr[9].ToString() != null && dr[9].ToString().Trim().Length > 0)
                        usuarioBE.idEquipo = Convert.ToInt32(dr[9]);
                    if (dr[10].ToString() != null && dr[10].ToString().Trim().Length > 0)
                        usuarioBE.idCargo = Convert.ToInt32(dr[10]);
                    if (dr[11].ToString() != null && dr[11].ToString().Trim().Length > 0)
                        usuarioBE.estado = dr[11].ToString();
                    if (dr[12].ToString() != null && dr[12].ToString().Trim().Length > 0)
                        usuarioBE.fechaCreacion = Convert.ToDateTime(dr[12]);
                    if (dr[13].ToString() != null && dr[13].ToString().Trim().Length > 0)
                        usuarioBE.fechaActualizacion = Convert.ToDateTime(dr[13]);
                    usuarios.Add(usuarioBE);
                }
            }
            catch (Exception ex)
            {
                errores = ex.Message;
                LogInfo oLogInfo = new LogInfo();
                oLogInfo.Descripcion = "UsuarioDAO " + ex.Message;
                oLogInfo.FechaHora = DateTime.Now;
                oLogInfo.NombreProceso = "obtenerUsuariosPorCriterio()";
                logManager.FileLog(oLogInfo);
            }
            finally
            {
                conexion.Dispose();
                cmd.Dispose();
                dr.Close();
            }
            return usuarios;
        }

        public List<UsuarioBE> obtenerUsuariosPorLogin(string login)
        {
            List<UsuarioBE> usuarios = new List<UsuarioBE>();
            SqlDataReader dr = null;
            try
            {
                conexion = cn.Conectar();
                cmd = new SqlCommand("usp_ObtenerUsuariosPorLogin", conexion);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@login", SqlDbType.VarChar));
                cmd.Parameters["@login"].Direction = ParameterDirection.Input;
                cmd.Parameters["@login"].Value = login;

                dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    UsuarioBE usuarioBE = new UsuarioBE();
                    if (dr[0].ToString() != null && dr[0].ToString().Trim().Length > 0)
                        usuarioBE.login = dr[0].ToString();
                    if (dr[1].ToString() != null && dr[1].ToString().Trim().Length > 0)
                        usuarioBE.nombre = dr[1].ToString();
                    if (dr[2].ToString() != null && dr[2].ToString().Trim().Length > 0)
                        usuarioBE.apellidoPaterno = dr[2].ToString();
                    if (dr[3].ToString() != null && dr[3].ToString().Trim().Length > 0)
                        usuarioBE.apellidoMaterno = dr[3].ToString();
                    if (dr[4].ToString() != null && dr[4].ToString().Trim().Length > 0)
                        usuarioBE.anexo = dr[4].ToString();
                    if (dr[5].ToString() != null && dr[5].ToString().Trim().Length > 0)
                        usuarioBE.telefono = dr[5].ToString();
                    if (dr[6].ToString() != null && dr[6].ToString().Trim().Length > 0)
                        usuarioBE.correoElectronico = dr[6].ToString();
                    if (dr[7].ToString() != null && dr[7].ToString().Trim().Length > 0)
                        usuarioBE.DNI = dr[7].ToString();
                    if (dr[8].ToString() != null && dr[8].ToString().Trim().Length > 0)
                        usuarioBE.idCentro = dr[8].ToString();
                    if (dr[9].ToString() != null && dr[9].ToString().Trim().Length > 0)
                        usuarioBE.idEquipo = Convert.ToInt32(dr[9]);
                    if (dr[10].ToString() != null && dr[10].ToString().Trim().Length > 0)
                        usuarioBE.idCargo = Convert.ToInt32(dr[10]);
                    if (dr[11].ToString() != null && dr[11].ToString().Trim().Length > 0)
                        usuarioBE.estado = dr[11].ToString();
                    if (dr[12].ToString() != null && dr[12].ToString().Trim().Length > 0)
                        usuarioBE.fechaCreacion = Convert.ToDateTime(dr[12]);
                    if (dr[13].ToString() != null && dr[13].ToString().Trim().Length > 0)
                        usuarioBE.fechaActualizacion = Convert.ToDateTime(dr[13]);
                    usuarios.Add(usuarioBE);
                }
            }
            catch (Exception ex)
            {
                errores = ex.Message;
                LogInfo oLogInfo = new LogInfo();
                oLogInfo.Descripcion = "UsuarioDAO " + ex.Message;
                oLogInfo.FechaHora = DateTime.Now;
                oLogInfo.NombreProceso = "obtenerUsuariosPorLogin()";
                logManager.FileLog(oLogInfo);
            }
            finally
            {
                conexion.Dispose();
                cmd.Dispose();
                dr.Close();
            }
            return usuarios;
        }
    }
}
